package xin.marcher.wind.process.instance;

import xin.marcher.wind.process.processor.Processor;

/**
 * 基于反射创建实例
 *
 * ProcessorInstanceCreator，流程里每个节点是如何构建出来的?
 * 框架是可以自己直接运行的，脱离 spring 容器，如果是这样子的话，流程定义里的各个节点一般都是通过反射自己构建的
 * 如果说是基于 spring 环境来运行的话，流程定义里的节点，都是基于 spring bean 实现注入的，作为流程中的节点
 *
 * @author marcher
 */
public class ReflectNodeInstanceCreator implements ProcessorInstanceCreator {

    @Override
    public Processor newInstance(String className, String name) throws Exception {
        Class<?> clazz = Class.forName(className);
        Object o = clazz.newInstance();
        if (!(o instanceof Processor)) {
            throw new IllegalArgumentException("类 " + className + " 不是 Processor 实例");
        }
        Processor processor = (Processor) o;
        processor.setName(name);
        return (Processor) o;
    }
}